#pragma once

#ifndef AST_COMMANDS_H
#define AST_COMMANDS_H

#include "ast_nodes.h"
#include "../codegen/llvmsyntax.cpp"

namespace ast {

namespace cmd {

class Add : public Command
{
public:
	// todo realize
	virtual void Codegen()
	{
		llvmBFCodeGen::getObj().genAddFunc();
	}
	virtual bool Metagen() {return false;}
};

class Sub : public Command
{
public:
	// todo realize
	virtual void Codegen()
	{
		llvmBFCodeGen::getObj().genSubFunc();
	}
	virtual bool Metagen() {return false;}
};

class Next : public Command
{
public:
	// todo realize
	virtual void Codegen()
	{
		llvmBFCodeGen::getObj().genNextFunc();
	}
	virtual bool Metagen() {return false;}
};

class Prev : public Command
{
public:
	// todo realize
	virtual void Codegen()
	{
		llvmBFCodeGen::getObj().genPrevFunc();
	}
	virtual bool Metagen() {return false;}
};

class Print : public Command
{
public:
	// todo realize
	virtual void Codegen()
	{
		llvmBFCodeGen::getObj().genPrintFunc();
	}
	virtual bool Metagen() {return false;}
};

class Scan : public Command
{
public:
	// todo realize
	virtual void Codegen()
	{
		llvmBFCodeGen::getObj().genScanFunc();
	}
	virtual bool Metagen() {return false;}
};

class Izgn : public Command
{
public:
	// todo realize
	virtual void Codegen()
	{
		llvmBFCodeGen::getObj().genIzgnFunc();
	}
	virtual bool Metagen() {return false;}
};

class Izgb : public Command
{
public:
	// todo realize
	virtual void Codegen()
	{
		llvmBFCodeGen::getObj().genIzgbFunc();
	}
	virtual bool Metagen() {return false;}
};

}	// namespace cmd

}	// namespace ast


#endif AST_COMMANDS_H